package cc.verywell.pureblock.net;

import java.nio.channels.CompletionHandler;
import java.util.concurrent.Future;

/**
* 
* Copyright © 2020 TanYaqiu. All rights reserved.
* @author TanYaqiu 
* @address flat 601
* @date 2020年2月17日 上午10:11:11
*/
@FunctionalInterface
public interface AioClientInterface<V,R> {
	
	/**
	 * 外线获得部件，当NormalSession到达后，会先释放Future的Get, 然后再执行handler里的内容;
	 * @param remote 外部，不可为null
	 * @param attachment 返回时附带组件，可以为null
	 * @param handler 返回时执行的组件，可以为null
	 * @return 返回一个future,请不要在主线程里执行get，因为这样阻塞一个线程,20200217的测试结果是，一旦把所有线程都阻塞，所有端口都会停止响应.
	 */
	<A> Future<V> connect(R remote,A attachment,CompletionHandler<V, A> handler);
	
	default Future<V> connect(R remote){
		return connect(remote,null,null);
	}
}

